#include <my_header.h>
typedef struct dir_s{
    const char* name;//目录名称
    struct dir_s* child;//孩子结点的指针数组
    struct dir_s* next;
    int children_count;//几个孩子结点
}dir_t;

typedef struct char_stack_s{
    char buf[1024];
    int count;//存目录有几段字符段
    int start[128];//存储每一段的首字节的index
}char_stack_t;//用来存储每个用户当前目录的字符串的

typedef struct user_group_s{
    dir_t* dir_pointer[12];//最多12个用户，存他们的目录指针
    char_stack_t* char_stack_pointer[12];//存他们当前目录表的指针
    char user_name[12][20];//存他们的名字，根据名字找索引,每个用户名最长20个字符
    int free[12];//判断是否忙碌，找到第一个空闲的容器
    int count;//存有几个用户
}user_group_t;
//有用户连接的时候首先检索用户名，如果有的话，跳转到指针那显示

int get_user_id(const char* name,user_group_t* group);
int create_user_id(const char*name,user_group_t* group);
dir_t* create_dir(const char* name,int user_id,user_group_t* group);
char_stack_t* create_stack(int user_id,user_group_t* group);
void show_dir(int netfd,char_stack_t* stack);
int add_dir(char* words,char_stack_t* stack);//cd 进一步跳转目录时用
int back_dir(char_stack_t* stack);
int back_to_root(char_stack_t* stack);
int exec_cd(int netfd,char_stack_t* stack,char* aim);
int new_dir(const char* name,dir_t* dir);//思路是在执行这个函数之前，先找到该用户的root菜单，然后通过root菜单来转到当前菜单，然后添加
int remove_dir(const char* name,dir_t* dir);
int search_dir(const char* name,dir_t* dir,int mode,char* buf);//从当前结点中读取所有下面的目录名,如果mode为0是查找，mode为1是则打印
dir_t* move_to_dir(char_stack_t* stack,dir_t* dir);
